/*
 * ReactionPath.h
 *
 *  Created on: 2 Aug 2011
 *      Author: Allan
 */

#ifndef REACTIONPATH_H_
#define REACTIONPATH_H_

// C++ includes
#include <vector>
#include <string>
using namespace std;

// GeoReact includes
#include "../Multiphase.h"
#include "../ReactionSystem.h"

class ReactionPath
{
public:
	ReactionPath();
	
	ReactionPath(const vector<string>& allSpecies, const vector<string>& equilibriumSpecies, const vector<string>& kineticSpecies, const vector<string>& initialConditions);
	
	void
	Initialiaze(const vector<string>& allSpecies, const vector<string>& equilibriumSpecies, const vector<string>& kineticSpecies, const vector<string>& initialConditions);
	
	void
	SetTemperaturePressure(double T, double P);
	
	void
	Solve(double tInit, double tEnd, double tDelta, const string& fileName);
	
private:
	Multiphase multiphase;
	
	ReactionSystem equilibriumReactions, kineticReactions;
	
	vector<string> initialConditions;
	
	vector<string> initialEquilibriumConditions;
	
	double T, P;
	
	VectorXd n;
	
private:
	void
	SolveInitialEquilibrium();
};

#endif /* REACTIONPATH_H_ */
